﻿using System;
using System.Data;
using System.Data.SqlClient;
using BadgeManager.Model;

namespace BadgeManager.Controller
{
    public class ctrlStoricoEntrate
    {
        public enum Inserimento
        {
            Eseguita,
            NoInserimento,
            Errore
        }

        public enum Cancellazione
        {
            Successo,
            NoElementi,
            Errore
        }

        public enum Modifica
        {
            Successo,
            NoElementi,
            Errore
        }

        private Connector conn;

        public ctrlStoricoEntrate()
        {
            conn = Connector.Istance();
        }

        //*********************************************
        public bool SeEntrato(StoricoEntrata Tessera) //se restituisce un GUID significa che è entrato
        {
            string sql = @"SELECT dataentrata,ora AS Ora,tipologiastorico AS Tipo
                FROM StoricoEntrate
                WHERE (dataentrata = '" + DateTime.Now.ToShortDateString() + "') AND (codicetessera = '" + Tessera.CodiceTessera + "') ORDER BY ora DESC";
            SqlDataAdapter com = new SqlDataAdapter(sql, conn.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            if (dt.Rows.Count > 0 && dt.Rows[0]["Tipo"].Equals("E"))
                return true;

            return false;//non è entrato
        }

        //*********************************************

        public Inserimento Inserisci(StoricoEntrata storicoEntrata)
        {
            string sql = @"
                INSERT INTO StoricoEntrate
                    VALUES
                    (@id
                    ,@dataentrata
                    ,@successo
                    ,@codicetessera
                    ,@ora
                    ,@note
                    ,@nomepersona
                    ,@cognomepersona
                    ,@idtessera
                    ,@idpersona
                    ,@tipologiastorico)
                    ";
            SqlCommand cmd = new SqlCommand(sql, conn.Connessione);
            cmd.Parameters.AddWithValue("@id", (Guid)storicoEntrata.Id);
            cmd.Parameters.AddWithValue("@dataentrata", (DateTime)storicoEntrata.DataEntrata);
            cmd.Parameters.AddWithValue("@successo", (bool)storicoEntrata.Successo);
            cmd.Parameters.AddWithValue("@codicetessera", storicoEntrata.CodiceTessera.ToString());
            cmd.Parameters.AddWithValue("@ora", (TimeSpan)storicoEntrata.Ora);
            cmd.Parameters.AddWithValue("@note", storicoEntrata.Note);

            if (storicoEntrata.NomePersona != null)
                cmd.Parameters.AddWithValue("@nomepersona", storicoEntrata.NomePersona);
            else
                cmd.Parameters.AddWithValue("@nomepersona", DBNull.Value);
            if (storicoEntrata.CognomePersona != null)
                cmd.Parameters.AddWithValue("@cognomepersona", storicoEntrata.CognomePersona);
            else
                cmd.Parameters.AddWithValue("@cognomepersona", DBNull.Value);

            cmd.Parameters.AddWithValue("@idtessera", (Guid)storicoEntrata.IdTessera);
            cmd.Parameters.AddWithValue("@idpersona", (Guid)storicoEntrata.IdPersona);
            cmd.Parameters.AddWithValue("@tipologiastorico", storicoEntrata.TipologiaStorico);
            if (cmd.ExecuteNonQuery() > 0)
                return Inserimento.Eseguita;
            return Inserimento.Errore;
        }

        public Cancellazione Cancella(StoricoEntrata Storico)
        {
            string sql;
            sql = "delete from StoricoEntrate "
                + " where id=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, conn.Connessione);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@condizione";
                condizione.SqlDbType = SqlDbType.UniqueIdentifier;
                condizione.Value = Storico.Id;
                cmd.Parameters.Add(condizione);

                if (cmd.ExecuteNonQuery() > 0)
                    return Cancellazione.Successo;
                else
                    return Cancellazione.NoElementi;
            }
            catch
            {
                return Cancellazione.Errore;
            }
        }

        //public List<StoricoEntrata> SelectAll()
        //{
        //    List<StoricoEntrata> lista = new List<StoricoEntrata>();
        //    foreach (DataRow riga in SelectTableAll().Rows)
        //    {
        //        StoricoEntrata sto = new StoricoEntrata();
        //        sto.Id = (Guid)riga[0];
        //        sto.DataEntrata = (DateTime)riga[1];
        //        sto.Successo = Convert.ToBoolean(riga[2]);
        //        sto.Tessera.Id = (Guid)riga[3];
        //        lista.Add(sto);
        //    }
        //    return lista;
        //}

        //private DataTable SelectTableAll()
        //{
        //    DataTable dati = new DataTable();

        //    Controller.Connector con = Controller.Connector.Istance();
        //    SqlConnection conn = con.Connessione;

        //    SqlDataAdapter adapter = new SqlDataAdapter(@"SELECT * FROM StoricoEntrate", conn);

        //    adapter.Fill(dati);
        //    return dati;
        //}

        public DataTable SelezionaTutto(string condizione = "1=1", string ordinamento = "")
        {
            string sql = @"SELECT id AS Id, dataentrata AS Entrata, successo AS Successo, codicetessera AS Tessera
                    , ora AS OraEntrata, note AS Messaggio, nomepersona AS Nome, cognomepersona AS Cognome, idtessera AS Tessera, idpersona AS Persona, tipologiastorico AS Tipologia
                    FROM StoricoEntrate";

            sql += " WHERE " + condizione;
            if (ordinamento != "")
                sql += " ORDER BY " + ordinamento;

            SqlDataAdapter com = new SqlDataAdapter(sql, conn.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);

            return dt;
        }

        //        // Inutilizzato e da modificare
        //        public List<StoricoEntrata> VisualizzaAccessiTessera(StoricoEntrata Storico)
        //        {
        //            string sql;
        //            sql = @"select id as Id,dataentrata as Entrata,successo as Successo
        //                ,idtessera as Tessera,ora as Orario
        //                where idtessera='" + Storico.Tessera.Id + "'";

        //            SqlDataAdapter com = new SqlDataAdapter(sql, conn.Connessione);
        //            DataTable dt = new DataTable();
        //            com.Fill(dt);
        //            List<StoricoEntrata> elencoRitorno = new List<StoricoEntrata>();
        //            foreach (DataRow row in dt.Rows)
        //            {
        //                StoricoEntrata storicoRitorno = new StoricoEntrata();
        //                storicoRitorno.Id = (Guid)row["Id"];
        //                storicoRitorno.DataEntrata = (DateTime)row["Entrata"];
        //                storicoRitorno.Successo = (bool)row["Successo"];
        //                storicoRitorno.Tessera.Id = (Guid)row["Tessera"];
        //                storicoRitorno.Ora = (TimeSpan)row["Ora"];
        //                elencoRitorno.Add(storicoRitorno);
        //            }
        //            return elencoRitorno;
        //        }
    }
}